// promisify:把nodejs里的异步操作变成promise调用形式
let { promisify } = require("util");
const fs = require("fs");

// 一、普通写法
// fs.readFile("./data.txt", (err, data => {
//   if (err) {
//     return console.log(err);
//   }
//   console.log(data.toString());
// }))

// 二、promisify把执行变成promise
// 会得到一个promise对象
// let p = promisify(fs.readFile)("./data.txt");
// p.then(data => {
//   // 异步执行成功了
//   console.log(data.toString());
// }, err => {
//   // 执行错误了
//   console.log(err);
// });

// 三、实现一个promisify;
function myPromisify (func) {
  return function (...args) {
    return new Promise((resolve, reject) => {
      func(...args, function (err, data) {
        if (err) {
          reject(err);
          return console.log(err);
        }
        // 判断data是否有，如果有就通过promise里的resolve返回出去，如果没有就不返还
        if (typeof data !== "undefined") {
          resolve(data);
        } else {
          resolve();
        }
      })
    })
  }
}
// 文件读取
// let p = myPromisify(fs.readFile)("./data.txt")
// p.then(res => {
//   console.log(res.toString());
// }, err => {
//   console.log(err);
// })

let p = myPromisify(fs.writeFile)("./chen.txt", "我是程宇.txt");
p.then(() => {
  console.log("写入成功");
}, err => {
  console.log(err);
})